﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;

using Барс.Своды.АргументыСобытийОтчетнойФормы;
using Барс.Своды.ОтчетнаяФорма;
using Барс.Своды.ТипыЯчеек;
using Барс.Своды.Увязки;

using ApiBI.ВспомогательныеМетоды;
using ApiBI;

using Барс.Своды.Утилиты;
using Барс.Интерфейс;
using Барс.Своды.BI;
using Барс.Ядро;

namespace Барс.Своды
{
	public partial class МодульФормы_Анализ_средств_род_сертиф : БазовыйОбработчикФормы

	{
		#region ПолучитьКомпонентФормы
		public КомпонентОтчетногоПериода ПолучитьКомпонентФормы(string кодФормы, DateTime датаНачала, DateTime датаКонца)
		{
			Барс.Ядро.Выборка<ОтчетныйПериод> выборка = new Барс.Ядро.Выборка<ОтчетныйПериод>();
			выборка.Запрос.ДобавитьУсловиеОтбора("ДатаНачала", датаНачала);
			выборка.Запрос.ДобавитьУсловиеОтбора("ДатаКонца", датаКонца);
			выборка.Запрос.ДобавитьУсловиеОтбора("ТипОтчетногоПериода", ТипОтчетногоПериода.Месячный);
			if(ПеременныеСессии.ТекущийПрофиль != null)
			{
				выборка.Запрос.ДобавитьУсловиеОтбора("ПрофильПользователя", ПеременныеСессии.ТекущийПрофиль);
			}
			
			выборка.Загрузить();
			foreach (ОтчетныйПериод период in выборка)
			{
				foreach (КомпонентОтчетногоПериода компонент in период.Компоненты)
				{
					foreach (ЭлементПакетаОтчетныхФорм форма in компонент.ПакетФорм.ОтчетныеФормы)
					{
						if (форма.ИдентификаторОтчетнойФормы == кодФормы)
						{
							return компонент;
						}
					}
				}
			}
			return null;
		}
		#endregion

		#region ПолучитьДанныеПрошлойФормы
		public ДанныеФормы ПолучитьДанныеПрошлойФормы()
		{
            КомпонентОтчетногоПериода прошлыйКомпонент = null;

            int прошлыйМесяц = Форма.Идентификатор.КомпонентОтчетногоПериода.IОтчетныйПериод.ДатаНачала.AddMonths(-1).Month;
//            int прошлыйМесяц = 1;
            int год = Форма.Идентификатор.КомпонентОтчетногоПериода.IОтчетныйПериод.ДатаНачала.Year;
            if (прошлыйМесяц == 12)
            {
                return null;
            }

            DateTime началоПрошлого = new DateTime(год, прошлыйМесяц, 1);
            DateTime конецПрошлого = new DateTime(год, прошлыйМесяц, DateTime.DaysInMonth(год, прошлыйМесяц));
			
			прошлыйКомпонент = ПолучитьКомпонентФормы("Анализ_средств_род_сертиф", началоПрошлого, конецПрошлого);
				
			
			if (прошлыйКомпонент != null)
			{
				ИдентификаторДанныхФормы идентификатор = new ИдентификаторДанныхФормы();
				идентификатор.КомпонентОтчетногоПериода = прошлыйКомпонент;
				идентификатор.Учреждение = Форма.Идентификатор.Учреждение;
				идентификатор.ИдентификаторМетаописанияФормы.ИдентификаторМетаописания = "Анализ_средств_род_сертиф";
				идентификатор.ЭлементЦепочки = Форма.Идентификатор.ЭлементЦепочки;
				ОтчетнаяФормаДанных прошлаяФорма = new ОтчетнаяФормаДанных(идентификатор);
				прошлаяФорма.Загрузить(new ПараметрыЗагрузкиОтчетнойФормыДанных(true, false));
				if (прошлаяФорма != null)
				{
					return прошлаяФорма.Данные;
				}
				else
				{
					return null;
				}
			}
			else
			{
				return null;
			}
		}
		#endregion
		#region Событие открытия формы
		public override void ОбработатьСобытиеОткрытияФормы(АргументыОткрытияФормы аргументы)
		{
			ДанныеФормы данныеПрошлойФормы=ПолучитьДанныеПрошлойФормы();	
			List<string> списокСтолбцовДляЗаполнения = new List<string>();            
            списокСтолбцовДляЗаполнения.Add("15_1");
            списокСтолбцовДляЗаполнения.Add("15_2");
            списокСтолбцовДляЗаполнения.Add("15_3");
            списокСтолбцовДляЗаполнения.Add("15_4");

			//			Барс.Интерфейс.Сообщение.Показать(данныеПрошлойФормы.Таблицы["таблица"].МатрицаЗначений["1","15_1"].ЗначениеСтрокой);
			foreach (string столбец in списокСтолбцовДляЗаполнения)
			{
				Форма.Таблицы["таблица"].МатрицаЗначений["1",столбец].ЗначениеЧисло = данныеПрошлойФормы.Таблицы["таблица"].МатрицаЗначений["1",столбец].ЗначениеЧисло;
			}				
		}
		#endregion
		
		#region Событие закрытия формы
		public override АргументыЗакрытияФормы ОбработатьСобытиеЗакрытияФормы(АргументыЗакрытияФормы аргументы)
		{
			ДанныеФормы данныеПрошлойФормы=ПолучитьДанныеПрошлойФормы();	
			List<string> списокСтолбцовДляЗаполнения = new List<string>();            

            списокСтолбцовДляЗаполнения.Add("27");
            списокСтолбцовДляЗаполнения.Add("28");
            списокСтолбцовДляЗаполнения.Add("29");
            списокСтолбцовДляЗаполнения.Add("30");

			//			Барс.Интерфейс.Сообщение.Показать(данныеПрошлойФормы.Таблицы["таблица"].МатрицаЗначений["1","15_1"].ЗначениеСтрокой);
			foreach (string столбец in списокСтолбцовДляЗаполнения)
			{
				string st1 = "", st2 = "";
				
				switch( столбец )   {
					case "27": st1 = "23"; st2 = "1"; break;
					case "28": st1 = "24"; st2 = "2"; break;
					case "29": st1 = "25"; st2 = "3"; break;
					case "30": st1 = "26"; st2 = "3_1"; break;
					default: break;
				}
				if( st1.CompareTo("") != 0 && st2.CompareTo("") != 0 )   {
				Форма.Таблицы["таблица"].МатрицаЗначений["1",столбец].ЗначениеЧисло = 
				Форма.Таблицы["таблица"].МатрицаЗначений["1",st1].ЗначениеЧисло -
				Форма.Таблицы["таблица"].МатрицаЗначений["1",st2].ЗначениеЧисло +
				данныеПрошлойФормы.Таблицы["таблица"].МатрицаЗначений["1",столбец].ЗначениеЧисло;
				}
			}				
			return аргументы;
		}
		#endregion

		#region Событие сохранения формы
		public override АргументыСохраненияФормы ОбработатьСобытиеСохраненияФормы(АргументыСохраненияФормы аргументы)
		{
			ДанныеФормы данныеПрошлойФормы=ПолучитьДанныеПрошлойФормы();	
			List<string> списокСтолбцовДляЗаполнения = new List<string>();            

            списокСтолбцовДляЗаполнения.Add("27");
            списокСтолбцовДляЗаполнения.Add("28");
            списокСтолбцовДляЗаполнения.Add("29");
            списокСтолбцовДляЗаполнения.Add("30");

			//Барс.Интерфейс.Сообщение.Показать(данныеПрошлойФормы.Таблицы["таблица"].МатрицаЗначений["1","33"].ЗначениеСтрокой);

			foreach (string столбец in списокСтолбцовДляЗаполнения)
			{
				string st1 = "", st2 = "";
				
				switch( столбец )   {
					case "27": st1 = "23"; st2 = "1"; break;
					case "28": st1 = "24"; st2 = "2"; break;
					case "29": st1 = "25"; st2 = "3"; break;
					case "30": st1 = "26"; st2 = "3_1"; break;
					default: break;
				}
				if( st1.CompareTo("") != 0 && st2.CompareTo("") != 0 )   {
				Форма.Таблицы["таблица"].МатрицаЗначений["1",столбец].ЗначениеЧисло = 
				Форма.Таблицы["таблица"].МатрицаЗначений["1",st1].ЗначениеЧисло -
				Форма.Таблицы["таблица"].МатрицаЗначений["1",st2].ЗначениеЧисло +
				данныеПрошлойФормы.Таблицы["таблица"].МатрицаЗначений["1",столбец].ЗначениеЧисло;
				}
			}				
			return аргументы;
		}
		#endregion
	}
}